package com.ww.springboot.boot.algorithm.sort;

import com.ww.springboot.boot.algorithm.Utils;

/**
 * 冒泡排序
 * 时间复杂度:n*n/2
 * 空间复杂度:n
 * <p>
 *
 * 特点：
 * 找值的过程中逐步优化排序,排序本身较为有序的话 可以提前结束排序
 *
 * 优化：
 * 如果空间交换次数为0 则可以提前结束遍历
 *
 *
 * @author wanwei
 * @since 2021-05-03 16:13
 */
public class BubbleSort {

    /**
     * 每次找出一个最大值或最小值
     */

    public static void main(String[] args) {
        int[] array = {2, 2, 3, 4, 5, 1, 6, 7, 8, 9};
        sort(array);
    }

    public static void sort(int[] array) {
        //最后一个不用比
        for (int i = 0; i < array.length - 1; i++) {
            //排好序的不用比
            Boolean flag = true;
            for (int j = 0; j < array.length - i - 1; j++) {
                if (array[j] - array[j + 1] > 0) {
                    int k = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = k;
                    flag = false;
                }
            }
            Utils.printfArray(array);
            if (flag) {
                break;
            }
        }
    }
}
